/*
Copyright (c) [2019年5月1日] [吴超]
[MBT_studio] is licensed under Mulan PSL v2.
You can use this software according to the terms and conditions of the Mulan PSL v2.
You may obtain a copy of Mulan PSL v2 at:
		 http://license.coscl.org.cn/MulanPSL2
THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
See the Mulan PSL v2 for more details.
*/
#pragma once

#include "节点/节点.h"

#include "节点/插座/C_物体插座.h"
#include "节点/插座/list/list矢量插座.h"



class C_平行光节点 : public C_节点基类 {
	S_物体* m_Ob;
	S_物体* m_灯光;
public:
	C_平行光节点(S_设备环境& ctx);
	~C_平行光节点();

	S_Props m_灯光标志位;

	bool	f_update();
	S_物体* f_get虚拟体();
	void	f_入回收();
	void	f_回收();
	void	f_读取(FILE* f);
	void	f_写入(FILE* f);
};

C_节点基类* f_node_创建平行光节点(S_设备环境& ctx, C_节点树* 子节点树);
C_节点基类* f_node_加载平行光节点(S_设备环境& ctx, FILE* f);
void f_node_保存平行光节点(C_节点基类* n, FILE* f);



class C_点光源节点 : public C_节点基类 {
	S_物体* m_Ob;
	//S_物体* m_灯光;
public:
	C_点光源节点(S_设备环境& ctx);
	~C_点光源节点();

	S_Props m_灯光标志位;

	bool	f_update();
	S_物体* f_get虚拟体();
	void	f_入回收();
	void	f_回收();
	void	f_读取(FILE* f);
	void	f_写入(FILE* f);
};

C_节点基类* f_node_创建点光源节点(S_设备环境& ctx, C_节点树* 子节点树);
C_节点基类* f_node_加载点光源节点(S_设备环境& ctx, FILE* f);
void f_node_保存点光源节点(C_节点基类* n, FILE* f);



class C_区域光节点 : public C_节点基类 {
	S_物体* m_Ob;
	S_物体* m_灯光;
public:
	C_区域光节点(S_设备环境& ctx);
	~C_区域光节点();

	S_Props m_形状类型;
	S_Props m_灯光标志位;

	bool	f_update();
	S_物体* f_get虚拟体();
	void	f_入回收();
	void	f_回收();

	void    f_切换区域光形状();
	void	f_读取(FILE* f);
	void	f_写入(FILE* f);
};

C_节点基类* f_node_创建面光源节点(S_设备环境& ctx, C_节点树* 子节点树);
C_节点基类* f_node_加载面光源节点(S_设备环境& ctx, FILE* f);
void f_node_保存面光源节点(C_节点基类* n, FILE* f);




class C_聚光灯节点 : public C_节点基类 {
	S_物体* m_Ob;
	S_物体* m_灯光;
public:
	C_聚光灯节点(S_设备环境& ctx);
	~C_聚光灯节点();

	S_Props m_灯光标志位;

	bool	f_update();
	S_物体* f_get虚拟体();
	void	f_入回收();
	void	f_回收();

	void	f_读取(FILE* f);
	void	f_写入(FILE* f);
};

C_节点基类* f_node_创建聚光灯节点(S_设备环境& ctx, C_节点树* 子节点树);
C_节点基类* f_node_加载聚光灯节点(S_设备环境& ctx, FILE* f);
void f_node_保存聚光灯节点(C_节点基类* n, FILE* f);


